home *** CD-ROM | disk | FTP | other *** search
/ PC-Blue - MS DOS Public Domain Library / PC-Blue MS-DOS Public Domain Library - NYACC.iso / vol025 / jammer.bas < prev    next >
Encoding:
BASIC Source File  |  1987-01-11  |  9.6 KB  |  267 lines

  1. 10 DEFINT A-Z
  2. 20 BRIGHT=10:DULL=2
  3. 50 CLS
  4. 55 KEY OFF
  5. 60 JAMSYM$=CHR$(8):RACSYM$=CHR$(15)
  6. 65 NUM.SCORE=0
  7. 150 ON ERROR GOTO 50000
  8. 160 OPEN "JAMMER.SCO" FOR INPUT AS #1
  9. 170 IF EOF(1) THEN CLOSE:GOTO 190
  10. 171 NUM.SCORE=NUM.SCORE+1
  11. 175 LINE INPUT #1,NAM$(NUM.SCORE):INPUT #1,SCO(NUM.SCORE)
  12. 180 GOTO 170
  13. 190 CLS:FOR S=NUM.SCORE+1 TO 10:NAM$(S)="-----------------":SCO(S)=0:NEXT :NUM.SCORE=10
  14. 200 CLS
  15. 300 DEF SEG:POKE 106,0
  16. 350 GOSUB 40000
  17. 400 YC=40:XC=12
  18. 500 LOCATE XC,YC
  19. 600 CP$(1)=CHR$(201)
  20. 700 CP$(2)=CHR$(187)
  21. 800 CP$(4)=CHR$(200)
  22. 900 CP$(3)=CHR$(188)
  23. 1000 KEY OFF:WIDTH 80
  24. 1100 DEF SEG=&HB800:POKE 0,77:IF PEEK(0)=77 THEN SEG=&HB800
  25. 1200 DEF SEG=&HB000:POKE 0,77:IF PEEK(0)=77 THEN SEG=&HB000
  26. 1300 CLS
  27. 1400 DEF FNPK$(ROW,COL)=CHR$(PEEK((ROW-1)*160 +(COL-1)*2))
  28. 1500 DEF SEG=SEG
  29. 1600 BRIGHT=10:DULL=2
  30. 1700 FALSE=0:TRUE=NOT FALSE
  31. 1800 Z=0               
  32. 1900 IF Z>10 THEN Z=10
  33. 1950 DEF SEG=SEG
  34. 2000 FOR LVL=1 TO 6
  35. 2100    CY(1)=YC-(LVL*4+Z-1)
  36. 2200    CX(1)=XC-(LVL*2-1)
  37. 2300    CY(3)=YC+(LVL*4+Z-1)
  38. 2400    CX(3)=XC+(LVL*2-1)
  39. 2500    CY(4)=YC-(LVL*4+Z-1)
  40. 2600    CX(4)=XC+(LVL*2-1)
  41. 2700    CY(2)=YC+(LVL*4+Z-1)
  42. 2800    CX(2)=XC-(LVL*2-1)
  43. 2900    FOR I=1 TO 4
  44. 3000       LOCATE CX(I),CY(I)
  45. 3100       PRINT CP$(I);
  46. 3200    NEXT
  47. 3300    FOR X=CX(1)+1 TO CX(4)-1
  48. 3400       LOCATE X,CY(1):PRINT CHR$(186);
  49. 3500       LOCATE X,CY(2):PRINT CHR$(186);
  50. 3600    NEXT
  51. 3700    FOR Y=CY(1)+1 TO CY(2)-1
  52. 3800       LOCATE CX(1),Y:PRINT CHR$(205);
  53. 3900       LOCATE CX(3),Y:PRINT CHR$(205);
  54. 4000    NEXT
  55. 4100    XLIM(1,LVL)=CX(1)+1
  56. 4200    XLIM(2,LVL)=CX(2)+1
  57. 4300    XLIM(3,LVL)=CX(3)-1
  58. 4400    XLIM(4,LVL)=CX(4)-1
  59. 4500    YLIM(1,LVL)=CY(1)+2
  60. 4600    YLIM(2,LVL)=CY(2)-2
  61. 4700    YLIM(3,LVL)=CY(3)-2
  62. 4800    YLIM(4,LVL)=CY(4)+2
  63. 4900 IF LVL=1 THEN 5800
  64. 5000 FOR X=XLIM(1,LVL) TO XLIM(4,LVL)
  65. 5100    LOCATE X,YLIM(1,LVL):PRINT CHR$(4);
  66. 5200    LOCATE X,YLIM(2,LVL):PRINT CHR$(4);
  67. 5300 NEXT
  68. 5400 FOR Y=YLIM(1,LVL) TO YLIM(2,LVL) STEP 2
  69. 5500    LOCATE XLIM(1,LVL),Y:PRINT CHR$(4);
  70. 5600    LOCATE XLIM(3,LVL),Y:PRINT CHR$(4);
  71. 5700 NEXT
  72. 5800 NEXT
  73. 5900 FOR X=XC-1 TO XC+1
  74. 6000    LOCATE X,YLIM(1,6):PRINT STRING$(18," ");
  75. 6100    LOCATE X,YLIM(2,2):PRINT STRING$(18," ");
  76. 6200 NEXT
  77. 6300 FOR Y=YC-2 TO YC+2                                          
  78. 6400    FOR X=XLIM(1,6) TO XLIM(1,2)
  79. 6500       LOCATE X,Y:PRINT " ";
  80. 6600       LOCATE X+12,Y:PRINT " ";
  81. 6700    NEXT
  82. 6800 NEXT
  83. 6900 TOTPTS=4*(50+5*INT(Z/2))-1
  84. 7000 LOCATE 3,1:PRINT "Total";
  85. 7100 LOCATE 4,1:PRINT "Points";
  86. 7200 LOCATE 2,1:PRINT USING " ###";TOTPTS;
  87. 7300 PTSREM=TOTPTS
  88. 7400 LOCATE 6,1:PRINT USING " ###";PTSREM
  89. 7500 LOCATE 7,1:PRINT "Remain";
  90. 7600 JAMSYM$=CHR$(8):RACSYM$=CHR$(15)
  91. 7700 RACLVL=6:JAMLVL=6
  92. 7800 RACX=XLIM(4,RACLVL):RACY=YLIM(4,RACLVL)
  93. 7900 JAMX=XLIM(3,JAMLVL):JAMY=YLIM(3,JAMLVL)
  94. 8000 RACBASESPD= 2:JAMBASESPD=1
  95. 8100 RACDIR=1:JAMDIR=2
  96. 8200 RACMAX=10:RACMIN=1
  97. 8300 RACXINC(1)=-1:RACYINC(1)=0
  98. 8400 RACXINC(2)=0:RACYINC(2)=1
  99. 8500 RACXINC(3)=1:RACYINC(3)=0
  100. 8600 RACXINC(4)=0:RACYINC(4)=-1
  101. 8700 JAMXINC(1)=0:JAMYINC(1)=-1
  102. 8800 JAMXINC(2)=-1:JAMYINC(2)=0
  103. 8900 JAMXINC(3)=0:JAMYINC(3)=1
  104. 9000 JAMXINC(4)=1:JAMYINC(4)=0
  105. 9100 JG$=CHR$(4)
  106. 9200 RACMOV%=RACBASESPD:JAMMOV%=JAMBASESPD
  107. 9250 IF NUM.SCO<>0 THEN LOCATE 25,1:PRINT USING "High Score: ##### by \              \";SCO(1),NAM$(1);
  108. 9300 '------------- Main loop ----------------
  109. 9400 A$=INKEY$:IF A$<>"" THEN GOSUB 14600
  110. 9500 IF ((JAMX=XC) OR (JAMY=YC)) AND (RACLVL<>JAMLVL) THEN GOSUB 18000
  111. 9600 RACMOV%=RACMOV%-1:IF RACMOV%=0 THEN RACMOV%=RACBASESPD:RAC.JUMPED=FALSE:GOSUB 9900
  112. 9700 JAMMOV%=JAMMOV%-1:IF JAMMOV%=0 THEN JAMMOV%=JAMBASESPD:JAM.JUMPED=FALSE:GOSUB 12200
  113. 9800 GOTO 9300
  114. 9900 '============= moves racer ================
  115. 10000 LOCATE RACX,RACY:PRINT " ";
  116. 10100 RACX=RACX+RACXINC(RACDIR):RACY=RACY+RACYINC(RACDIR)
  117. 10200 IF RACX<XLIM(1,RACLVL) OR RACX>XLIM(3,RACLVL) THEN 10800
  118. 10300 IF RACY<YLIM(1,RACLVL) OR RACY>YLIM(2,RACLVL) THEN 10800
  119. 10400 G$=FNPK$(RACX,RACY):IF G$=CHR$(4) THEN GOSUB 11100
  120. 10500 IF G$=CHR$(8) THEN 13400
  121. 10600 COLOR BRIGHT:LOCATE RACX,RACY:PRINT RACSYM$;:COLOR DULL
  122. 10700 RETURN
  123. 10800 RACX=XLIM(RACDIR,RACLVL):RACY=YLIM(RACDIR,RACLVL)
  124. 10900 RACDIR=(RACDIR MOD 4)+1
  125. 11000 GOTO 10100
  126. 11100 SOUND 56,2:PTSREM=PTSREM-1
  127. 11200 LOCATE 6,1:PRINT USING " ###";PTSREM
  128. 11300 IF PTSREM=0 THEN 11500
  129. 11400 RETURN
  130. 11500 CLS
  131. 11600 LOCATE 10,30
  132. 11650 SCO=INT(Z/2)*100+100
  133. 11800 LOCATE 12,30
  134. 11900 PRINT "Bravo -- now try this one"
  135. 12000 FOR I=1 TO 10:FOR J=0 TO 9:SOUND 200+50*J,1:NEXT :NEXT :CLS
  136. 12100 Z=Z+2:GOTO 1900
  137. 12200 '============= moves jammer ===============
  138. 12300 LOCATE JAMX,JAMY:IF JG$=CHR$(8) THEN COLOR BRIGHT ELSE COLOR DULL
  139. 12350 PRINT JG$;:COLOR DULL
  140. 12400 JAMX=JAMX+JAMXINC(JAMDIR):JAMY=JAMY+JAMYINC(JAMDIR)
  141. 12500 IF JAMX<XLIM(1,JAMLVL) OR JAMX>XLIM(3,JAMLVL) THEN 13100
  142. 12600 IF JAMY<YLIM(1,JAMLVL) OR JAMY>YLIM(2,JAMLVL) THEN 13100
  143. 12700 JG$=FNPK$(JAMX,JAMY)
  144. 12800 IF JG$=CHR$(15) THEN 13400
  145. 12900 COLOR BRIGHT:LOCATE JAMX,JAMY:PRINT JAMSYM$;:COLOR DULL
  146. 13000 RETURN
  147. 13100 JAMX=XLIM(JAMDIR,JAMLVL):JAMY=YLIM(JAMDIR,JAMLVL)
  148. 13200 JAMDIR=ABS(JAMDIR-1): IF JAMDIR=0 THEN JAMDIR=4
  149. 13300 GOTO 9900
  150. 13400 COLOR BRIGHT
  151. 13500 LOCATE XC,YC-Z/2-1
  152. 13600 PRINT "Oops";
  153. 13700 FOR I=250 TO 50 STEP -5:SOUND I,1:NEXT
  154. 13800 LOCATE 10,30                            
  155. 13850 SCO=(TOTPTS-PTSREM)/TOTPTS*100+(INT(Z/2))*100
  156. 13900 PRINT USING "Your score was ####" ;SCO
  157. 14000 FOR I=1 TO 5:LOCATE RACX,RACY:PRINT CHR$(8);:FOR WT=1 TO 500:NEXT:LOCATE RACX,RACY:PRINT " ";:FOR WT=1 TO 500:NEXT:NEXT
  158. 14100 CLS
  159. 14400 COLOR 2
  160. 14450 GOSUB 30000
  161. 14500 GOTO 200
  162. 14600 A=ASC(RIGHT$(A$,1))
  163. 14700 IF A=72 AND LEN(A$)=2 THEN A=1:GOTO 15200
  164. 14800 IF A=77 AND LEN(A$)=2 THEN A=2:GOTO 15200
  165. 14900 IF A=80 AND LEN(A$)=2 THEN A=3:GOTO 15200
  166. 15000 IF A=75 AND LEN(A$)=2 THEN A=4:GOTO 15200
  167. 15050 BEEP
  168. 15100 A=0:RETURN
  169. 15200 IF A=RACDIR THEN RACBASESPD=RACBASESPD-1:SOUND 250,3:GOTO 15700
  170. 15300 IF A=(RACDIR+1) MOD 4 +1 THEN RACBASESPD=RACBASESPD+1:SOUND 150,3:GOTO 15900
  171. 15400 IF A=(RACDIR MOD 4)+1 THEN 16100
  172. 15500 IF A=((RACDIR+2) MOD 4)+1 THEN 17300
  173. 15600 STOP
  174. 15700 IF RACBASESPD<RACMIN THEN RACBASESPD=RACMIN
  175. 15800 RETURN
  176. 15900 IF RACBASESPD>RACMAX THEN RACBASESPD=RACMAX
  177. 16000 RETURN
  178. 16100 IF ((RACDIR=1 OR RACDIR=3) AND ABS(RACX-XC)<2) THEN 16400
  179. 16200 IF ((RACDIR=2 OR RACDIR=4) AND ABS(RACY-YC)<2) THEN 16400
  180. 16300 RETURN
  181. 16400 LOCATE RACX,RACY:PRINT " ";
  182. 16500 IF RAC.JUMPED THEN RETURN
  183. 16600 RACLVL=RACLVL-1:SOUND 190,3:IF RACLVL<2 THEN RACLVL=2
  184. 16700 IF RACDIR=1 THEN RACY=YLIM(1,RACLVL)
  185. 16800 IF RACDIR=2 THEN RACX=XLIM(2,RACLVL)
  186. 16900 IF RACDIR=3 THEN RACY=YLIM(3,RACLVL)
  187. 17000 IF RACDIR=4 THEN RACX=XLIM(4,RACLVL)
  188. 17040 G$=FNPK$(RACX,RACY):IF G$=CHR$(4) THEN GOSUB 11100
  189. 17050 IF G$=CHR$(8) THEN 13400
  190. 17100 RAC.JUMPED=TRUE
  191. 17200 RETURN
  192. 17300 IF ((RACDIR=1 OR RACDIR=3) AND ABS(RACX-XC)<2) THEN 17600
  193. 17400 IF ((RACDIR=2 OR RACDIR=4) AND ABS(RACY-YC)<2) THEN 17600
  194. 17500 RETURN
  195. 17600 LOCATE RACX,RACY:PRINT " ";
  196. 17700 IF RAC.JUMPED THEN RETURN
  197. 17800 RACLVL=RACLVL+1:SOUND 90,3:IF RACLVL>6 THEN RACLVL=6
  198. 17900 GOTO 16700
  199. 18000 IF RND(5)<.97-(Z*.1)   THEN LOCATE JAMX,JAMY:PRINT " "; ELSE SOUND 300,2:SOUND 400,2
  200. 18100 IF JAM.JUMPED THEN RETURN
  201. 18200 JAM.JUMPED=TRUE:IF RND(5)>.9 THEN RETURN
  202. 18250 IF JAMLVL>2 AND RND(.5)>.9 THEN JAMLVL=JAMLVL-1:SOUND 190,3:GOTO 18500
  203. 18300 IF RACLVL>JAMLVL THEN JAMLVL=JAMLVL+1:SOUND 90,3
  204. 18400 IF RACLVL<JAMLVL THEN JAMLVL=JAMLVL-1:SOUND 190,3
  205. 18500 IF JAMDIR=1 THEN JAMX=XLIM(1,JAMLVL)
  206. 18600 IF JAMDIR=2 THEN JAMY=YLIM(2,JAMLVL)
  207. 18700 IF JAMDIR=3 THEN JAMX=XLIM(3,JAMLVL)
  208. 18800 IF JAMDIR=4 THEN JAMY=YLIM(4,JAMLVL)
  209. 18900 RETURN
  210. 30000 IP=1
  211. 30010 FOR I=1 TO 10
  212. 30020    IF SCO(I)>SCO THEN IP=I+1
  213. 30030 NEXT
  214. 30040 IF IP=11 THEN RETURN
  215. 30050 PRINT "Congratulations, your score is in the top 10 !!!"
  216. 30055 IF INKEY$<>"" THEN 30055
  217. 30060 PRINT:PRINT
  218. 30070 PRINT"What is your name: ";:COLOR BRIGHT:LINE INPUT N$:COLOR DULL
  219. 30080 FOR I=9 TO IP STEP -1
  220. 30090   NAM$(I+1)=NAM$(I)
  221. 30100   SCO(I+1)=SCO(I)
  222. 30110 NEXT
  223. 30120 SCO(IP)=SCO
  224. 30130 NAM$(IP)=N$
  225. 30140 OPEN "JAMMER.SCO" FOR OUTPUT AS #1
  226. 30150 FOR I=1 TO 10
  227. 30155     PRINT #1,NAM$(I):PRINT#1,SCO(I)
  228. 30160 NEXT:CLOSE:RETURN
  229. 40000 RC=60
  230. 40005 JC=10:JR=20
  231. 40010 COLOR BRIGHT:LOCATE 10,RC,0:PRINT "Racer  ";
  232. 40020 LOCATE JR,JC:PRINT " Jammer":COLOR DULL
  233. 40030 FOR WT=1 TO 50:NEXT
  234. 40035 IF JR=11 THEN 41000
  235. 40040 RC=RC-1:JC=JC+1
  236. 40045 IF JC>RC-10 THEN LOCATE JR,JC:PRINT "      ";:JR=JR-1:JC=JC-1
  237. 40050 GOTO 40010
  238. 41000 LOCATE 1 ,10:PRINT "Use arrow keys to speed up,slow down, and change direction"
  239. 41005 PRINT:PRINT "                       Press Space Bar to Begin"
  240. 41010 LOCATE 5,20:PRINT RACSYM$;" -- Racer    ";JAMSYM$;" -- Jammer"
  241. 41050 LOCATE 15,10
  242. 41055 PRINT "High Scores:"
  243. 41056 PRINT "         --------------":PRINT
  244. 41060 FOR I=1 TO 5
  245. 41063 IF RIGHT$(NAM$(I),1)="|" THEN COLOR DULL ELSE COLOR BRIGHT
  246. 41065 PRINT USING "   ## \            \   #####   ";I,NAM$(I),SCO(I);
  247. 41066 IF RIGHT$(NAM$(I+5),1)="|" THEN COLOR DULL ELSE COLOR BRIGHT
  248. 41068 PRINT USING "   ## \            \   #####   ";I+5,NAM$(I+5),SCO(I+5)
  249. 41069 COLOR DULL
  250. 41070 NEXT
  251. 41095 IF INKEY$<>" " THEN 41095 ELSE CLS:RETURN
  252. 50000 '==== Error =======
  253. 50010 IF ERR=53 AND ERL=160 THEN GOTO 51000
  254. 50090 ON ERROR GOTO 0
  255. 51000 NAM$(1)="Heroic            |":SCO(1)=500
  256. 51005 NAM$(2)="Professional      |":SCO(2)=400
  257. 51010 NAM$(3)="Challenger        |":SCO(3)=300
  258. 51015 NAM$(4)="Excellent         |":SCO(4)=250
  259. 51020 NAM$(5)="Very Good         |":SCO(5)=200
  260. 51025 NAM$(6)="Good              |":SCO(6)=150
  261. 51030 NAM$(7)="Amateur           |":SCO(7)=100
  262. 51035 NAM$(8)="Beginner          |":SCO(8)=75
  263. 51045 NAM$(9)="Poor              |":SCO(9)=50
  264. 51050 NAM$(10)="Why Bother?      |":SCO(10)=25
  265. 51100 NUM.SCORE=10
  266. 52000 RESUME 190
  267. NAM$(9)="P